package com.ticket.sass.provider.util.util;


import cn.hutool.crypto.digest.BCrypt;

/**
 * 密码加密工具类，使用 BCrypt 算法进行密码加密
 * 由于算法名称本身包含多个单词，因此类名不采用驼峰命名法
 * @author ywb
 * @date 2023-02-16 14:12
 */

public class BCryptUtil {
    private final String salt;
    
    /**
     * 构造函数，指定盐值
     * @param salt 盐值，长度为 29 的字符串，不含版本号前缀
     */
    public BCryptUtil(String salt) {
        // 加上版本号前缀
        this.salt = "$2y$10$" + salt;
    }
    
    /**
     * 加密明文密码
     * @param password 明文密码
     * @return 加密后的密码
     */
    public String encrypt(String password) {
        return BCrypt.hashpw(password, salt);
    }
    
    /**
     * 校验明文密码和加密后的密码是否匹配
     *
     * @param password 明文密码
     * @param hashedPassword 加密后的密码
     * @return 是否匹配
     */
    public boolean check(String password, String hashedPassword) {
        return BCrypt.checkpw(password, hashedPassword);
    }
}

